package nige.volum.core;

import java.io.File;
import java.util.Vector;

/**
 * Scan les dossier
 * @author Nicolas Genevaux
 *
 */
public class ScanFolder {
	
	/**
	 * Demarrage du thread
	 * Boucle dans un dossier
	 * Si dossier, creation d'un nouveau 
	 * thread dossier
	 * Si fichier, creation d'un nouveau 
	 * thread fichier
	 * @param dossier Nom du dossier a scanner
	 * @param langages Vecteur contenant les langages
	 */
	public void scan(String dossier,Vector<Langage> langages) {
		File f = new File(dossier);
		File[] listFichier = f.listFiles();
		int finFor = listFichier.length;
		// Parcours la liste des fichiers dans
		// le dossier
		for(int i=0;i<finFor;i++) {
			performObjet(listFichier[i],langages);
		}
		listFichier = null;
	}
	
	/**
	 * Verifie le fichier et lance un thread pour le scan
	 * @param fichier Fichier a verifier
	 * @param langages Vecteur contenant les langages
	 */
	private void performObjet(File fichier,Vector<Langage> langages) {
		if(fichier.isDirectory()) {
			// Lancement d'un nouveau scan de dossier
			scan(fichier.toString(),langages);
		}
		else {
			ScanFile.fichierTotalScanne++;
			// Si c'est un fichier on le traite
			estUnFichier(fichier,langages);
		}
	}
	
	/**
	 * Si l'objet est un fichier
	 * On cherche son langage
	 * On le scan
	 * @param Fichier Fichier a scanner
	 * @param langages Vecteur contenant les langages
	 */
	private void estUnFichier(File Fichier,Vector<Langage> langages) {
		int finFor = langages.size();
		for(int j=0;j<finFor;j++) {
			if(langages.get(j).scan(Fichier.toString())) {
				j = langages.size();
			}
		}
		// Il faurait ajouter ici : 
		// ScanFile.scanner(Fichier.toString(),null)
		// si on veut scanner des fichier non valide au niveau du langage
	}
	
}
